對於軟體打包的應用distribution zip是很常見的方式,解壓縮後完整的軟體內容就包含在其中,可以從bin目錄下啟動相關應用,設定好環境變數更可以讓作業系統找到指令執行,例如java、maven、h2 database、jboss、tomcat等等,就讓我們來看看要怎麼將我們的專案做一個ZIP打包
以maven這個軟體來說,解壓縮後的資料夾結構會長下面這個樣子
以h2 database資料庫會長下面這個樣子
這邊的專案延續Day5的專案再做修改,使用maven-assembly-plugin
這個套件進行ZIP打包,它需要一下配置發佈的xml設定檔,另外搬JAR的工作就交給maven-dependency-plugin
這個套件
資料夾規劃
myapp
+---bin (sh與bat存放位置)
+---conf (logback設定檔路徑)
+---lib (依賴套件與主程式jar檔)
\---logs (預計程式執行後生成log檔路徑)
pom.xml設定配置
<plugins>
<!-- Maven Dependency Plugin for copying dependencies -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.6.1</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>prepare-package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/dependency</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
</executions>
</plugin>
<!-- Maven Assembly Plugin for creating distribution ZIP -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.7.1</version>
<configuration>
<descriptors>
<descriptor>src/assembly/distribution.xml</descriptor>
</descriptors>
<finalName>${project.artifactId}-${project.version}</finalName>
<appendAssemblyId>true</appendAssemblyId>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
assembly-plugin配置distribution.xml
<?xml version="1.0" encoding="UTF-8"?>
<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.2.0
http://maven.apache.org/xsd/assembly-2.2.0.xsd">
<id>distribution</id>
<formats>
<format>zip</format>
</formats>
<includeBaseDirectory>true</includeBaseDirectory>
<fileSets>
<!-- Include the main JAR file -->
<fileSet>
<directory>${project.build.directory}</directory>
<outputDirectory>/bin</outputDirectory>
<includes>
<include>${project.build.finalName}.jar</include>
</includes>
</fileSet>
<!-- Include all dependencies (excluding test scope) -->
<fileSet>
<directory>${project.build.directory}/dependency</directory>
<outputDirectory>/lib</outputDirectory>
<includes>
<include>*.jar</include>
</includes>
<excludes>
<exclude>junit-*.jar</exclude>
<exclude>apiguardian-*.jar</exclude>
<exclude>opentest4j-*.jar</exclude>
</excludes>
</fileSet>
<!-- Include configuration files from src/main/resources -->
<fileSet>
<directory>src/main/resources</directory>
<outputDirectory>/conf</outputDirectory>
<includes>
<include>**/*</include>
</includes>
</fileSet>
<!-- Include documentation -->
<fileSet>
<directory>.</directory>
<outputDirectory>/</outputDirectory>
<includes>
<include>README.md</include>
<include>LICENSE</include>
<include>*.txt</include>
</includes>
</fileSet>
<!-- Include launcher scripts -->
<fileSet>
<directory>src/assembly</directory>
<outputDirectory>/bin</outputDirectory>
<includes>
<include>run.bat</include>
<include>run.sh</include>
</includes>
<fileMode>0755</fileMode>
</fileSet>
</fileSets>
</assembly>
執行結果
程式執行後路徑
my-app-1.0-SNAPSHOT
| README.md
|
+---bin
| run.bat
| run.sh
| MyApp.jar
|
+---conf
| application.properties
| logback.xml
|
+---lib
| logback-classic-1.5.18.jar
| logback-core-1.5.18.jar
| slf4j-api-2.0.17.jar
|
\---logs
MyApp-error.log
MyApp.log
我們maven-assembly-plugin
幫我們達到打包發佈Distribution ZIP,有AI的幫助一切真變得更簡單了XD,要注意的是h2 database把主程式放在bin路徑下,而maven主程式則放在boot資料夾下,就看個人怎麼規劃了